Java位运算总结-leetcode题目

按位操作符只能用于整数基本数据类型中的单个bit中,操作符对应表格:

Operator Description
& 按位与(12345&1=1,可用于判断整数的奇偶性)
| 按位或
^ 异或(同假异真)
~ 非(一元操作符)
&=,|=,^= 合并运算和赋值
<<N 左移N位,低位补0
>>N 右移N位,(正数:高位补0,负数高位补1)
>>>N 无符号右移(无论正负数,高位皆补0)
<<=,>>=,>>>= 合并运算和赋值(移动相应位数再赋值给左边变量)

leetcode191:

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.

值得注意的是我们要将传入的int n作为无符号整数看待,但是在java中int是有符号的,我想到的方法就是利用上面的>>>无符号移位操作,代码如下:

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int num = 0;
        do{
            if((n & 1) == 1) num++;
        }while((n>>>=1) > 0);
        return num;
    }
    
    public static void main(String[] args){
        System.out.println((new Solution()).hammingWeight(11));
    }
}

 

leetcode190

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as00111001011110000010100101000000).

Follow up:
If this function is called many times, how would you optimize it?

二进制的倒置可以用移位来进行,增加运算效率

1     public int reverseBits(int n) {
2         int rs = 0;
3         for (int i = 0; i < 32; i++) {
4             rs = (rs << 1) + (n & 1);
5             n >>= 1;
6         }
7         return rs;
8     }

 

leetcode7:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

十进制的倒置同样值得注意的就是倒置以后溢出的问题,我采用的方法就是函数内利用Long类型来进行计算,并在转换成int前与intMax进行比较,如果溢出返回0(题目要求)

 1     public int reverse(int x) {
 2         long l = new Long(x);
 3         Long tmp = 0L;
 4         while (l != 0) {
 5             tmp = tmp * 10 + l % 10L;
 6             l /= 10;
 7         }
 8         if (x > 0 && tmp > 2147483647L || x < 0 && tmp < -2147483648)
 9             return 0;
10         return tmp.intValue();
11     }

 

想到了新的解法再更新

 

posted @ 2015-03-31 20:02  xlturing  阅读(898)  评论(0编辑  收藏  举报